package com.luoy.designpatterns.factory;

/**
 * @desc:
 *
 *  工厂方法是一种创建型设计模式， 解决了在不指定具体类的情况下创建产品对象的问题。
 *
 *  应用场景
 *  1.当你在编写代码的过程中， 如果无法预知对象确切类别及其依赖关系时， 可使用工厂方法。
 *  2.如果你希望用户能扩展你软件库或框架的内部组件， 可使用工厂方法。
 *  3.如果你希望复用现有对象来节省系统资源， 而不是每次都重新创建对象， 可使用工厂方法。
 *
 * @author: luoy
 * @date: 2022-06-30 16:26
 */
public class Demo {
    private static Dialog dialog;

    public static void main(String[] args) {
        configure();
        runBusinessLogic();
    }

    /**
     * The concrete factory is usually chosen depending on configuration or
     * environment options.
     */
    static void configure() {
        if (System.getProperty("os.name").equals("Windows 10")) {
            dialog = new WindowsDialog();
        } else {
            dialog = new HtmlDialog();
        }
    }

    /**
     * All of the client code should work with factories and products through
     * abstract interfaces. This way it does not care which factory it works
     * with and what kind of product it returns.
     */
    static void runBusinessLogic() {
        dialog.renderWindow();
    }
}